package untitled.src.com.mtwo.work;

public class WorkOne {


    /* 1. 编程实现以下需求：
       定义一个长度为[16][16]的整型二维数组并输入或指定所有位置的元素值，分别实现二维数组中所有行和所有列中所有元素的累加和并打印。
       再分别实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印。*/
    public static void main(String[] args) {

        //定义一个长度为[16][16]的整型二维数组
        int[][] nums = new int[16][16];
        //使用双重for循环实现给nums二维数组赋值,每行的值为1-16
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < nums[i].length; j++) {
                nums[i][j] = j + 1;
                //System.out.print(nums[i][j] + "\t");
            }
        }

        //使用双重for循环打印二维数组
        for (int m = 0; m < nums.length; m++) {
            for (int h = 0; h < nums[m].length; h++) {
                System.out.print(nums[m][h] + "\t");
            }
            System.out.println();
        }

        /*
        实现二维数组中所有行元素的总和
         */
        //定义变量用于记录行总和
        int num = 0;
        //使用双重for循环打印二维数组
        for (int i = 0; i < nums.length; i++) {
            //初始化num的值，用于计算每行元素的和不包含以上行数的元素和
            num = 0;
            for (int j = 0; j < nums[i].length; j++) {
                //将nums二维数组每行每列的元素赋值给num记录，且+num本身的值，求出每行元素的总和
                num += nums[i][j];
            }
            //System.out.println();
            //输出打印每行元素的总和
            System.out.println("第" + (i + 1) + "行的总和" + num + "\t");
        }

        System.out.println("---------------");

        /*
        实现二维数组中所有列元素的总和
         */
        //定义以为数组用于存储二维数组每列元素的总和
        int[] rank = new int[16];

        //使用双重for循环打印二维数组
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < nums[i].length; j++) {
                //将nums二维数组每行每列的元素赋值给rank以为数组记录，且+rank一维数组每列的元素，计算出nums每列元素的总和
                rank[j] += nums[i][j];
            }
        }

        //使用for循环实现打印一维数组
        for (int i = 0; i < rank.length; i++) {
            //输出打印rank中记录的元素
            System.out.println("第" + (i + 1) + "列的总和" + rank[i] + "\t");
        }

        System.out.println("-----------------");

        /*
        实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印。
         */
        //定义变量用于记录左上角到右下角总和
        int num1 = 0;
        //使用双重for循环打印二维数组
        for (int i = 0; i < nums.length; i++) {
            num1 += nums[i][i];
        }
        //输出打印每行元素的总和
        System.out.println("从左到右对角线总和" + num1 + "\t");

        //定义变量用于记录右上角到左下角总和
        int num2 = 0;
        //使用双重for循环打印二维数组
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < nums[i].length; j++) {
                if (j == nums.length - i - 1) {
                    num2 += nums[i][j];
                }
            }
        }
        //输出打印每行元素的总和
        System.out.println("从右到左对角线总和" + num2 + "\t");

    }



}
